package com.sxbbc.common.core.mapper.jz;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.sxbbc.common.core.dto.jz.*;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sxbbc.common.core.entity.jz.OrderMain;
import com.sxbbc.common.core.utils.BasePage;

/**
 * <p>
 * 订单主表信息 Mapper 接口
 * </p>
 *
 * @author xiaoky
 * @since 2019-05-09
 */
public interface OrderMainMapper extends BaseMapper<OrderMain> {

	/**
	 * 查询订单列表
	 * @param orderMain 订单查询条件
	 * @return IPage<OrderMain>
	 * @author xiaoky
	 */
	IPage<OrderMain> queryOrder(BasePage<OrderMain> page, @Param("order") OrderMain orderMain);

	BigDecimal queryOrderMoneyByTypeAndTime(QueryOrderMoneyVo vo);
	
	int countOrderNumByTypeAndTime(QueryOrderMoneyVo vo);

	int countLocationOrderNumByTypeAndTime(@Param("bidList")Set<Integer> bidList, @Param("dataType") String dataType);

	IPage<OrderMain> queryOrderList(BasePage<OrderMain> page, @Param("order") OrderMain orderMain);


    /**
     * 查询订单状态数量
     * @param order 订单数据
     * @return
     * @author xiaoky
     */
	int countOrderNum(OrderMain order);

	/**
	 * 查询符合自动收货的订单
	 * @param autoOver
	 * @return
	 * @author xiaoky
	 */
	List<OrderMain> queryOverOrder(@Param(value = "autoOver")Integer autoOver);

	/**
	 * 查询线上订单 已完成 无退款 不为积分 列表
	 * @author leehao
	 * @return java.util.List<com.sxbbc.common.core.dto.jz.FreezeVo>
	 */
    List<FreezeVo> queryFreezeOnlineOrder(@Param("dayTimes") Integer dayTimes);
    
    /**
     * 查询订单数量
     * @param vo 查询条件
     * @return
     */
	int queryOrderNumByTypeAndTime(QueryOrderMoneyVo vo);

	/**
	 * 查询本月产品销量统计数据(前十)
	 * @param page 分页
	 * @param date 日期
	 * @return
	 * @author xiaoky
	 */
	IPage<Map<String, Object>> queryMonthSalePro(BasePage<OrderMain> page, @Param("date")String date);

	/**
	 * 查询商家交易排行列表
	 * @param vo
	 * @return
	 */
	List<DataTransactionVo> queryBusinessTransaction(@Param("vo")DataTransactionVo vo);

	/**
	 * 查询订单退款排行
	 * @param vo
	 * @return
	 */
    List<DataOrderRefundVo> queryOrderRefund(@Param("vo")DataOrderRefundVo vo);

	/**
	 * 查询订单退款明细
	 * @return
	 */
	IPage<OrderMain> queryBusinessOrderRefundDetail(BasePage<OrderMain> page, @Param("order") OrderMain orderMain, @Param("timeDays") Integer timeDays);


    OfflineOrderOutVo getVerifyCode(@Param("verifyCode") String verifyCode);
}
